package client;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;

import common.ComandiException;




public class VistaLocaleGUI extends JFrame{
	private static final int maxCaselleVL=9;
	private static final int dimCelle=80;
	public static int getDimcelle() {
		return dimCelle;
	}

	private JButton[][] pulsantiMappaLoc=new JButton[maxCaselleVL][maxCaselleVL];
	private Client client;
	private String idDino;
	private AscoltatorePulsantiMappaLoc a;
	private AscoltatorePulsantiMappaLocStato aStato;
	private Grafica grafica;
	private JButton closeButton;
	
	JLabel stato;
	JFrame s;
	
	public JLabel getStato() {
		return stato;
	}

	public void setStato(JLabel stato) {
		this.stato = stato;
	}

	public AscoltatorePulsantiMappaLocStato getaStato() {
		return aStato;
	}

	public void setaStato(AscoltatorePulsantiMappaLocStato aStato) {
		this.aStato = aStato;
	}

	private int origineX;
	private int origineY;
	
	public JButton[][] getPulsantiMappaLoc() {
		return pulsantiMappaLoc;
	}

	public void setPulsantiMappaLoc(JButton[][] pulsantiMappaLoc) {
		this.pulsantiMappaLoc = pulsantiMappaLoc;
	}

	private JPanel panel_vista_loc=new JPanel();
	
	public JPanel getPanel_vista_loc() {
		return panel_vista_loc;
	}

	public void setPanel_vista_loc(JPanel panel_vista_loc) {
		this.panel_vista_loc = panel_vista_loc;
	}

	public String getIdDino() {
		return idDino;
	}

	public void setIdDino(String idDino) {
		this.idDino = idDino;
	}
	
	public VistaLocaleGUI(Client client, Grafica grafica){
		super("Vista Locale della Mappa");
		this.client=client;
		this.grafica=grafica;
		setLayout(new BorderLayout());
		setPreferredSize(new Dimension(dimCelle*6,dimCelle*6));
		panel_vista_loc.setPreferredSize(new Dimension(dimCelle*8, dimCelle*8));		
		panel_vista_loc.setLayout(null);
		
		for (int i=0; i<maxCaselleVL; i++){
			for (int j=0; j<maxCaselleVL; j++){
				pulsantiMappaLoc[i][j]=new JButton();
				pulsantiMappaLoc[i][j].setBounds(j*dimCelle,i*dimCelle,dimCelle,dimCelle);
				pulsantiMappaLoc[i][j].setVisible(false);
				panel_vista_loc.add(pulsantiMappaLoc[i][j]);
			
			}
		}
		
		//JPanel panel_stato =new JPanel();
		//stato= new JLabel();
		//panel_stato.add(stato);
		
		//s.add(panel_stato);
		
		JPanel panel_closeButton =new JPanel();
		closeButton=new JButton("CHIUDI");
		AscoltatoreCloseButton closeB=new AscoltatoreCloseButton();
		closeButton.addActionListener(closeB);
		panel_closeButton.add(closeButton);
		add(panel_vista_loc, BorderLayout.WEST);
		add(panel_closeButton, BorderLayout.SOUTH);
		pack();
		setVisible(false);
		a=new AscoltatorePulsantiMappaLoc();
		
		aStato=new AscoltatorePulsantiMappaLocStato();
		/*for(int i=0;i<Grafica.RIGHE_MAPPA;i++){
			for(int j=0;i<Grafica.COLONNE_MAPPA;j++){
				pulsantiMappaLoc[i][j].addActionListener(new AscoltatorePulsantiMappaLoc());
			}
		
		}
		*/
	}

	public JFrame getS() {
		return s;
	}

	public void setS(JFrame s) {
		this.s = s;
	}

	AscoltatorePulsantiMappaLoc getA() {
		return a;
	}

	public void setA(AscoltatorePulsantiMappaLoc a) {
		this.a = a;
	}

	class AscoltatorePulsantiMappaLoc implements ActionListener{
		public void actionPerformed(ActionEvent e){
			JButton pulsante=(JButton) e.getSource();
			char[] name=pulsante.getName().toCharArray();
			int x;
			int y;
			String xS=null;
			String yS=null;
			int i=1;
			xS=""+name[0];
			yS=""+name[2];
			/*i++;
			while(name[i]!=','){
				xS=xS+name[i];
				i++;
			}
			i++;
			yS=""+name[i];
			while(i<name.length){
				i++;
				yS=yS+name[i];
			}
			*/
			x=Integer.parseInt(xS);
			y=Integer.parseInt(yS);
			
			try{
				String risp=client.getServerInt().movimento(client.getToken(),idDino,x+origineX,y+origineY);
				if(risp.equals("ok")){
					client.ok();
				}	
				else if(risp.equals("ok,v")){
					risp="v";
					client.ok(risp);
				}	
				else if(risp.equals("ok,p")){
					risp="p";
					client.ok(risp);
				}	
			}catch(ComandiException ex){
				if(ex.getMessage().equals("finePartita")){
					client.setInPartita(false);
				}
				client.no(ex.getMessage());
			}
			catch(IOException ex){
				System.out.println("----------"+ex.getMessage()+"-------------");
				client.no("errore di connessione xxx");
			}
		}
		
	}
	
	
	
	class AscoltatorePulsantiMappaLocStato implements MouseListener{
		public void actionPerformed(ActionEvent e){
			
		}

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			try{
				String stato=client.getServerInt().statoDinosauro(client.getToken(),idDino);
				client.statoDinosauro(stato);
			}catch(ComandiException ex){
				client.no(ex.getMessage());
			}
			catch(IOException ex){
				client.no("errore di connessione");
			}	
		
			
			//System.out.println("entrato");
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
		grafica.getFrameStato().dispose();
		//stato.setText("");
		//stato.repaint();
		//System.out.println("uscito");
		
		}
	}
	
	
	class AscoltatoreCloseButton implements ActionListener{
		public void actionPerformed(ActionEvent e){
		 dispose();
		
		}
	}
	
	
	public int getOrigineX() {
		return origineX;
	}

	public void setOrigineX(int origineX) {
		this.origineX = origineX;
	}

	public int getOrigineY() {
		return origineY;
	}

	public void setOrigineY(int origineY) {
		this.origineY = origineY;
	}
	
}
